<?php
/**
 * Zead
 *
 * LICENSE	
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://www.opensource.org/licenses/bsd-license.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to eu@marcelomx.com so we can send you a copy immediately.
 *
 * @category   Zead
 * @author     Marcelo Rodrigues Gonzaga <eu@marcelomx.com>
 * @copyright  Copyright (c) 2008 Marcelo Rodrigues Gonzaga
 * @link       http://code.google.com/p/zead 
 * @license    http://www.opensource.org/licenses/bsd-license.php     New BSD License
 *
 **/


/** @see Zead_Html_Filter_Abstract **/
require_once 'Zead/Html/Filter/Abstract.php';

/**
 * @category   Zead
 * @package    Zead_Html
 * @subpackage Zead_Html_Filter
 * @copyright  Copyright (c) 2008 Marcelo Rodrigues Gonzaga 
 * @license    http://www.opensource.org/licenses/bsd-license.php     New BSD License  
 */
class Zead_Html_Filter_Menu extends Zead_Html_Filter_Abstract
{
	/**
	 * Aplica o filtro que tem a função de procurar elementos com o id siteName ou outro
	 * passado como argumento que será o título do site.
	 * @param string $value O título do site
	 * @param string $id O id do elemento a ser alterado.
	 */
	public function filter($menuList = array()) 
	{
		foreach ($this->html->documentElement->select("code.menu") as $code) {
			$target   = $code->getAttribute('target');
			$maxLevel = $code->getAttribute('max-level');
			$listType = $code->getAttribute('list-type');
			$block = $this->html->createElement('div');
			$code->parentNode->replaceChild($block,$code);
			$this->appendList($block, $menuList, $target, $maxLevel, $listType);
		}
	}
	
	/**
	 * Creates the list/sublist to block from a table list
	 *
	 * @param DOMNode $block
	 * @param array   $tocList
	 * @param int     $maxLevel
	 * @param int     $tocLevel
	 * @param string  $style Possible values: accordion, tabs, dropdown, popup, jumping
	 * @return void
	 */
	protected function appendList($block, $menuList, $target = '', $maxLevel = 1, $listType = 'ul', $menuLevel = 1, $style = 'single')
	{
		if ($menuLevel > $maxLevel)
			return;
		
		$div = $block->appendChild($this->html->createElement('div'));
		$ul  = $div->appendChild($this->html->createElement('ul'));
		
		if ($menuLevel == 1) {
			$ul->addClassName('firstLevel');
		}
		foreach ($menuList as $menuItem) {
			$li = $ul->appendChild($this->html->createElement('li'));

			$a  = $li->appendChild($this->html->createElement('a'));
			$a->setAttribute('href', $menuItem->url);
			$a->nodeValue = $menuItem->title;
			
			if ($target != '') {
				$a->setAttribute('target', $target);
			}
			if ($menuItem->menuList->count()) {
				$this->appendList($li, $menuItem->menuList, $target, $maxLevel, $listType, ($menuLevel + 1));
			}
		}
	}
}

